package cn.lingyangwl.agile.infra.gen.model.entity;

import cn.lingyangwl.agile.model.BasePlusPO;
import cn.lingyangwl.agile.infra.gen.constants.GenType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.*;
import lombok.experimental.Accessors;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * 业务表 gen_table
 *
 * @author shenguangyang
 */
@Getter
@Setter
@TableName("lcp_gen_table")
@Accessors(chain = true)
@AllArgsConstructor
@Builder
public class GenTable extends BasePlusPO {
    private static final long serialVersionUID = 1L;

    /**
     * 编号
     */
    @TableId
    private Long id;

    /**
     * 数据源id
     */
    private Long datasourceId;

    /**
     * 表名称
     */
    @NotBlank(message = "表名称不能为空")
    private String tableName;

    /**
     * 表描述
     */
    @NotBlank(message = "表描述不能为空")
    private String tableComment;

    /**
     * 使用的模板（crud单表操作 tree树表操作 sub主子表操作）
     * @see GenType
     */
    private String tplCategory;

    /**
     * 生成包路径
     */
    @NotBlank(message = "生成包路径不能为空")
    private String packageName;

    /**
     * 生成模块名
     */
    @NotBlank(message = "生成模块名不能为空")
    private String moduleName;

    /**
     * 生成功能名
     */
    @NotBlank(message = "生成功能名不能为空")
    private String functionName;

    /**
     * 模板组id
     */
    private Long templateGroupId;

    /**
     * 生成版本
     */
    private String genVersion;

    /**
     * 作者
     */
    private String author;

    /**
     * 删除的前缀
     */
    private String delPrefix;

    /**
     * 类名
     */
    private String className;

    /**
     * 说明, 一般用于类描述
     */
    private String description;

    /**
     * 表列信息
     */
    @Valid
    @TableField(exist = false)
    private List<GenTableColumn> columns;

    public GenTable(Long id) {
        this.id = id;
    }

    public GenTable() {
    }

    public static LambdaQueryWrapper<GenTable> lqw() {
        return Wrappers.lambdaQuery();
    }
}